package com.subdoc.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;

/**
 * Json转换工具
 *
 * @className: JsonUtil
 * @Description: TODO(Json转换工具)
 * @author: Baron
 * @date: 2017/5/7 19:09
 * @version: 1.0
 * @url: https://www.baron.cn
 */
public class JsonUtil {
    /**
     * 定义jackson对象
     */
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 将对象转换成json字符串
     * @Title: objectToJson
     * @Description: TODO(将对象转换成json字符串)
     * @param @param data Java对象
     * @param @return  参数说明
     * @return String    返回json字符串
     * @throws
     */
    public static String objectToJson(Object data) {
        try {
            String string = MAPPER.writeValueAsString(data);
            return string;
        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将json结果集转换为Java对象
     * @Title: jsonToPojo
     * @Description: TODO(将json结果集转换为Java对象)
     * @param @param jsonData json数据
     * @param @param beanType 对象中的object类型
     * @param @return  参数说明
     * @return T    返回Java对象
     * @throws
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType){
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将json数据转换为pojo对象List
     * @Title: jsonToList
     * @Description: TODO(将json数据转换为pojo对象List)
     * @param @param jsonData json数据
     * @param @param beanType 对象中的object类型
     * @param @return  参数说明
     * @return List<T>    返回List集合对象
     * @throws
     */
    public static <T>List<T> jsonToList(String jsonData, Class<T> beanType){
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            List<T> list = MAPPER.readValue(jsonData, javaType);
            return list;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}
